#include <bits/stdc++.h>
using namespace std;

const int N = 1000;
int father[N];  //father[i] i所在树的根节点在father数组的下标
int size[N];    //size[i] 以i为根节点的树的节点个数
void init(){
    for(int i = 0; i < N; i++){
        father[i] = i;
        size[i] = 1;
    }
}
int find(int i){
    if(father[i] == i){
        return i;
    }
    father[i] = find(father[i]);
    return father[i];
}
void merge(int i, int j){
    int f1 = find(i);
    int f2 = find(j);
    if(f1 != f2){
        father[f1] = f2;
        size[f2] += size[f1];
    }
}
int main()
{
    int n;
    cin >> n;
    int arr[n];
    for (int i = 0; i < n; i++)
    {
        cin >> arr[i];
    }
    init();
    for(int i = 0; i < n - 1; i++){
        for(int j = i + 1; j < n; j++){
            if(arr[i] > arr[j]){
                merge(i, j);
            }
        }
    }
    int res = INT_MIN;

    for(int i = 0; i < n; i++){
        res = max(res, size[i]);
    }
    cout<<res;
    
    return 0;
}

/*

题目描述
给定一个长N的序列A，对于所有二元组(i,j) （1<=i<=n，1<=j<=n），如果满足i<j并且Ai>Aj，
那么就在i和j之间连接一条边，这样最终得到一个无向图G。那么现在你需要求出无向图G的最大连通块的点数。

输入说明
第一行一个整数N，接下来一行N个整数，表示序列A。

1 <= N <= 1000，1 <= Ai <= 109。

输出说明
输出一行，表示答案。

输入样例
样例1：

4

2 3 1 8


样例2：

7

3 4 2 4 2 8 6

样例3:

4

1 2 3 4

样例4：

5

4 4 3 2 3

输出样例
样例1：

3

样例2：

5

样例3：

1

样例4：

5
*/